package co.edu.uniandes.moviles.rollerjudge.logica;

import java.util.ArrayList;
import java.util.Date;

public class PruebaGrupal {
	
	public final static boolean MASCULINO = true;
	
	public final static boolean FEMENINO = false;
	
	private ArrayList<Registro> registros;
	
	private ArrayList<Equipo> participantes;
	
	private Date fechaInicio;
	
	private Date fechaFin;
	
	private ArrayList<Equipo> listaLlegada; 
	
/**
	 * @return the listaLlegada
	 */
	public ArrayList<Equipo> getListaLlegada() {
		return listaLlegada;
	}

	/**
	 * @param listaLlegada the listaLlegada to set
	 */
	public void setListaLlegada(ArrayList<Equipo> listaLlegada) {
		this.listaLlegada = listaLlegada;
	}

private int distancia;
	
	/**
 * @return the distancia
 */
public int getDistancia() {
	return distancia;
}

/**
 * @param distancia the distancia to set
 */
public void setDistancia(int distancia) {
	this.distancia = distancia;
}

	private String genero;
	private int edadMinima;
	
	private int edadMaxima;
	
	public PruebaGrupal(ArrayList<Equipo> equipos, String genero, int edadMinima, int edadMaxima, int distancia){
		this.participantes =  equipos;
		this.genero = genero;
		this.edadMinima = edadMinima;
		this.edadMaxima = edadMaxima;
		registros = new ArrayList<Registro>();
		this.distancia = distancia;
		listaLlegada = new ArrayList<Equipo>();
	}
	
	public void iniciarPrueba(){
		fechaInicio = new Date();
	}
	
//	public void terminarPrueba(){
//	
//		for ( int i = 0; i < llegadas.size(); i++){
//			Registro registro = llegadas.get(i);
//			Equipo equipo = registro.getEquipo();
//			listaLlegada.add(equipo);
//			equipo.registrarPruebaRealizada(i+1, darNumeroFaltasEquipo(equipo), estaDescalificado(equipo));
//		}
//		
//		for (int i = 0; i < participantes.size(); i++){
//			Equipo equipo = participantes.get(i);
//			if(!listaLlegada.contains(equipo)){
//				listaLlegada.add(equipo);
//				equipo.registrarPruebaRealizada(listaLlegada.size()-i, darNumeroFaltasEquipo(equipo), estaDescalificado(equipo));
//			}
//		}
//		fechaFin = new Date();
//	}
	
	public int darNumeroFaltasEquipo(Equipo equipo){
		int cuenta = 0;
		for (Registro registro : registros) {
			if(registro.getEquipo()==equipo && registro.getTipo().equals(Registro.FALTA)){
				cuenta++;
			}
		}
		return cuenta;
	}
	
	public void agregarRegistro(Registro pRegistro) throws Exception{
		registros.add(pRegistro);
		Equipo equipo = pRegistro.getEquipo();
		if(pRegistro.getTipo().equals(Registro.FALTA)){
			int faltas = darNumeroFaltasEquipo(equipo);
			if(faltas >= 3){
				Registro descalificacion = new Registro(null, equipo, Registro.DESCALIFICACION, new Date());
				registros.add(descalificacion);
				throw new Exception(descalificacion.getTipo());
			}
		}
		else if(pRegistro.getTipo().equals(Registro.LLEGADA))
		{
			listaLlegada.add(equipo);
		}
	}
	
	public void cancelarInscripcionEquipo(Equipo equipo){
		participantes.remove(equipo);
	}
	
	public boolean estaDescalificado(Equipo equipo){
		for (Registro registro : registros) {
			if(registro.getEquipo()==equipo && registro.getTipo().equals(Registro.DESCALIFICACION)){
				return true;
			}
		}
		return false;
	}

	public ArrayList<Equipo> getParticipantes() {
		return participantes;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public ArrayList<Registro> getRegistros() {
		return registros;
	}

	public int getEdadMinima() {
		return edadMinima;
	}

	public int getEdadMaxima() {
		return edadMaxima;
	}
	
	public String getGenero(){
		return genero;
	}
	
	public String resumen()
	{
		String res="";
		for(int i =0;i<registros.size();i++)
		{
			res+=registros.get(i).getEquipo().getNombre() + "-"+registros.get(i).getTipo() + "-"+ registros.get(i).getFecha()+"\n" ;
		}
		return res;
	}

}
